/*
 * @Author: 0x9DEFA478
 * @Date: 2021-03-11 17:53:34
 * @LastEditTime: 2025-08-11 22:51:27
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * 
 */
#ifndef hH_String_H_
#define hH_String_H_
#include "H_Type.h"
#ifdef __cplusplus
extern "C"{
#endif




/**
 * @brief 获取字符串长度
 * @param String 字符串
 * @return 字符串长度
 */
Hsize H_StringLength(const char* String);

/**
 * @brief 复制字符串到缓冲区
 *        超过BufferSize的部分被截断, 只复制前BufferSize个字节的字符
 * @param Buffer 要复制到的缓冲区
 * @param BufferSize 缓冲区大小
 * @param String 字符串
 * @return 可复制的长度 根据字符串情况可能会大于BufferSize
 */
Hsize H_StringCopy(Hbyte* Buffer,Hsize BufferSize,const char* String);

/**
 * @brief 查找字符串中某个字符第一次出现的位置
 * @param String 字符串
 * @param Ch 要查找的字符
 * @return 位置索引 -1代表查找到字符串结尾都没有发现字符
 */
Hsize H_StringFindFirstChar(const char* String,char Ch);

/**
 * @brief 判断字符串是否具有特定后缀
 * @param String 目标字符串
 * @param Suffix 后缀字符串
 * @return 0:String具有Suffix后缀 其他:String不具有Suffix后缀
 */
int H_StringIsSuffix(const char* String,const char* Suffix);

/**
 * @brief UTF8字符串转Unicode
 * @param UTF_String UTF8字符串
 * @param Unicode 返回转换后的Unicode
 * @return 0: 已到字符串结尾 
 *         正数: 转换成功, 为转换掉的UTF8字节数
 *         负数: 转换失败, 绝对值为转换掉的UTF8字节数
 */
Hsize H_UTF8_ConvertTo_Unicode(const char* UTF_String,Char32* Unicode);

/**
 * @brief 格式化打印到缓冲区
 *        超过BufferSize的部分被截断, 只生成前BufferSize个字节的字符
 * @param Buffer 要复制到的缓冲区
 * @param BufferSize 缓冲区大小
 * @param Format 格式字符串
 * @param ... 附加参数
 * @return 生成的字符串长度, 根据输入情况可能会大于BufferSize
 */
CheckPrintfFormat(2,3) Hsize H_StringPrintf(Hbyte* Buffer,Hsize BufferSize,const char* Format,...);




#ifdef __cplusplus
}
#endif
#endif //hH_String_H_
